/*
 * @Author: CPS
 * @Date: 2020-07-22 02:35:58
 * @Last Modified by:   Administrator
 * @Last Modified time: 2020-08-04 16:20:49
 * @Projectname Electron-fileWatcher
 * @Filename addStructure.js
 * 生成：文件列表的主要结构
 */
'use strict'

/**
 * 使用apply 将数组2 合并到数组1里面，并清空数组2
 *
 * @param      {Array}   a1      A 1
 * @param      {<type>}  a2      A 2
 */
function mergeArray(a1, a2) {
  let len = a1.length;
  if (len < 4000) {
    a1.push.apply(a1, a2)
    a2.pop()
    // a2.unshift.apply(a2, a1)
  } else {
    for (let i = 0; i < len; i = i + 5000) {
      a2.unshift.apply(a2, a1.slice(i, i + 5000));
    }
  }
}

function n(name) {
  return 'fileWatcher__' + name
}


/**
 * 创建头部结构,
 *
 * @param      {<对象>}  tar     The tar
 * @return     {Object}  { description_of_the_return_value }
 */
function addHeader(tar, icon) {
  return { // header
    html: 'header',
    style: {
      className: n('floderHeader'),
    },
    info: {
      id: tar.id,
      dirname: tar.dirname,
      path: tar.path,
    },
    child: [{
      html: 'img',
      style: {
        src: tar.type ? src[tar.type] : icon.src[`文件夹`]
      }
    }, {
      html: 'span',
      style: {
        className: n('eachFloderName')
      },
      text: tar.dirname ? tar.dirname : '、xxxxxxxx/',
    }, {
      style: {
        className: n('floderBtnGroup'),
      },
      child: [{
        html: 'img',
        style: {
          src: icon.src[`打开文件夹`],
          className: n('btnSelOpenFloder'),
        }
      }, {
        html: 'img',
        style: {
          src: icon.src[`关闭按钮`],
          className: n('btnCloseFloder'),
        }
      }]
    }]
  }
}

/**
 * 创建元素的内容结构
 *
 * @param      {<type>}  tar     The tar
 * @return     {Object}  { description_of_the_return_value }
 */
function addContent(tar, icon) {
  let file = []
  let floder = []
  let child = []
  tar.files.forEach(item => {
    //文件夹
    let iconExt
    let name

    if (item.type == '文件夹') {
      iconExt = icon.src['floder']
      name = item.name
    } else {
      iconExt = icon.src[item.ext] ? icon.src[item.ext] : icon.src['file']
      name = icon.src[item.ext] ? item.name + '.' + item.ext : item.name + '.' + item.ext
    }

    //文件
    let tmp = {
      ext: item.ext,
      style: {
        className: n('eachFile')
      },
      child: [{
        html: 'span',
        style: {
          className: n('eachFileIcon')
        },
        child: [{
          html: 'img',
          style: {
            src: iconExt ? iconExt : icon.src['file']
          }
        }]
      }, {
        html: 'span',
        style: {
          className: n('eachFileName'),
        },
        text: name ? name : 'xxxxxxxxxxxxxxxxxxxxxx.docx'
      }, {
        html: 'span',
        style: {
          className: n('eachFileSize'),
        },
        text: item.words > 0 ? item.words + ' 字' : item.size
      }]
    }

    if (item.type == '文件夹') {
      floder.push(tmp)
    } else {
      file.push(tmp)
    }
  })

  /**
   * { 给文件排序 }
   *
   * @type       {<type>}
   */
  file.sort((a, b) => {
    let x = a.ext.toLowerCase();
    let y = b.ext.toLowerCase();
    if (x == 'doc' || x == 'docx') {
      return -1;
    }
    // if (y == 'xls' || y == 'xlsx') { return 1; }
    if (y == 'pdf' || x == 'pdf') {
      return -3;
    }
    return 0;
  })

  // 合并数组数据
  mergeArray(child, file);
  mergeArray(child, floder);

  return {
    html: 'div',
    style: {
      className: n('floderContent')
    },
    child: child
  }
}

/**
 * 计算各个类型的数量
 *
 * @param      {<type>}  tar     The tar
 * @return     {Object}  { description_of_the_return_value }
 */
function addFooter(tar, icon) {
  let child = []
  let ext = {
    floder: 0,
    file: {
      excel: 0,
      word: 0,
      ppt: 0,
      pdf: 0,
      file: 0,
    }
  }

  tar.files.forEach(item => {
    // 判断文件夹/文件
    if (item.type == '文件夹') {
      ext['floder'] += 1
    } else {
      if (item.ext == 'xlsx' || item.ext == 'xls') {
        ext.file.excel += 1
      } else if (item.ext == 'doc' || item.ext == 'docx') {
        ext.file.word += 1
      } else if (item.ext == 'ppt' || item.ext == 'pptx') {
        ext.file.ppt += 1
      } else if (item.ext == 'pdf') {
        ext.file.pdf += 1
      } else {
        ext.file.file += 1
      }
    }
  })

  // 先添加文件数量统计
  for (let each in ext.file) {
    // 去除不存在的格式展示
    if (ext.file[each] <= 0) continue;
    child.push({
      style: {
        className: n(each)
      },
      child: [{
        html: 'img',
        ext: each,
        style: {
          src: icon.src[each]
        }
      }, {
        html: 'span',
        text: ext.file[each],
        style: {
          className: n('fileCount')
        }
      }]
    })
  }
  // 添加文件夹数量统计
  return {
    html: 'footer',
    style: {
      className: n('floderFooter'),
    },
    child: child
  }
}

/**
 * 创建容器标签，唯一
 *
 * @param      {<type>}  tar     要创建的目录
 * @return     {Object}  { description_of_the_return_value }
 */
function container(tar, icon) {
  let child = []
  child.push(addHeader(tar, icon))
  child.push(addContent(tar, icon))
  child.push(addFooter(tar, icon))
  return {
    html: 'session',
    style: {
      className: n('eachFloder'),
    },
    child: child
  }
}

module.exports = (tar, icon) => {
  if (!tar) return
  return container(tar, icon)
}